import axios from 'axios';
import store from '@/store'
import router from '@/router';
import { message } from 'ant-design-vue';

const instance = axios.create({
  baseURL: process.env.VUE_APP_BASE_URL,
  timeout: 5000
})

// request 拦截器
instance.interceptors.request.use(
  async config => {
    config.headers.token = JSON.parse(localStorage.getItem("vuex")).token;
    if (config.method == 'post'|| config.method == 'put') {
      config.headers['Content-Type'] = 'application/json';
    }
    if (config.method == 'get') {
      config.headers['Content-Type'] = 'application/x-www-form-urlencoded';
    }
    return config;
  },
  error => {
    return Promise.reject(error);
  }
)

// response 拦截器
instance.interceptors.response.use(
  response => {
      if (response.data.code !== 200) {
        message.error(response.data.message);
        return Promise.resolve(response.data);
      } else {
        message.success(response.data.message);
        return Promise.resolve(response.data);
      }
  },
  error => {
    if (error && error.response) {
      switch (error.response.status) {
        // 401: 未登录                
        // 未登录则跳转登录页面，并携带当前页面的路径                
        // 在登录成功后返回当前页面，这一步需要在登录页操作。                
        case 401:
          error.message = "登录信息过期，请重新登录"
          store.dispatch('LoginOut');
          router.push('/login');
          break
        case 403:
          error.message = "权限不足";
          break
        // 404请求不存在                
        case 404:
          error.message = "请求地址不存在";
          router.push('/');
          break;
        // 其他错误，直接抛出错误提示                
        default:
          error.message = "服务器开小差了，请稍后重试";
          break;
      }
    } else {
      error.message = "网络异常";
    }
    message.error(error.message);
    return Promise.resolve();
  }
)

export default instance